#pragma once

#include "image.h"

struct GraphicsSurface
{
	enum surfaceCategory
	{
		imageSurface,
		deviceSurface
	};
	virtual surfaceCategory GetCategory() const = 0;
	virtual GraphicsSurface* Clone() = 0;
};

class Image;
struct ImageSurface : public GraphicsSurface
{
	ImageSurface(const Image& image){this->image = image;}
	surfaceCategory GetCategory() const{return imageSurface;}

	virtual ImageSurface* Clone()
	{
		return new ImageSurface(image);
	}
	Image image;
};

struct DeviceSurface : public GraphicsSurface
{
	DeviceSurface(uintptr_t deviceContext){ this->deviceContext = deviceContext;}
	surfaceCategory GetCategory() const{return deviceSurface;}
	virtual DeviceSurface* Clone()
	{
		return new DeviceSurface(deviceContext);
	}
	uintptr_t deviceContext;
};
